#coding:utf-8
import json

from django_redis import get_redis_connection

from erp_system.models import PermissionsModel


def redis_storage_permissions(user):
    """
    把当前用户的权限信息，缓存到Redis数据库中
    Redis中存放用户的权限结构为：uesr_用户ID---->字典{key:path,value[列表]}（json的字符串）
    """
    permission_ids = user.roles.values_list('permissions', flat=True).distinct()
    #根据权限ID,获取权限的所有值,一级菜单的权限除外
    permissions=PermissionsModel.objects.filter(is_menu=False,id__in=permission_ids).values('id','path','method','name')

    if not permissions.exists(): #exists表示空的，判断permissions是否是空的
        return

    permissions_dict={}#存放当前用户的权限,已path为key
    for permission in permissions:
        #因为数据需要转换json格式的字符串，所以排除那些特殊符号
        method=str(permission.get('method')).replace('\u200b','')#u200b不可见的符号如回车换行符
        path=str(permission.get('path')).replace('\u200b','')#u200b不可见的符号如回车换行符
        _name=str(permission.get('name')).replace('\u200b','')#u200b不可见的符号如回车换行符
        _id=permission.get('id')
        if path in permissions_dict:
            permissions_dict[path].append({
                'method':method,
                'sign':_name,
                'id':_id
            })
        else:
            permissions_dict[path]=[{
                'method': method,
                'sign': _name,
                'id': _id
            }]

    for key in permissions_dict:
        permissions_dict[key]=json.dumps(permissions_dict[key]) #把字典变成json

    #存放到reids
    redis_conn=get_redis_connection('default')#获得redis数据库的链接
    redis_conn.hmset(f'user_{user.id}',permissions_dict)

